package com.dragon.protoJo.codec;

import com.dragon.protoJo.ProtoInstant;
import com.dragon.protoJo.bean.msg.ProtoMsg;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;


/**
 * proto编码器
 */
public class ProtobufEncoder extends MessageToByteEncoder<ProtoMsg.Message>
{

    @Override
    protected void encode(ChannelHandlerContext channelHandlerContext, ProtoMsg.Message message, ByteBuf out) throws Exception {
        // 写入魔数
        out.writeShort(ProtoInstant.MAGIC_CODE);
        // 写入版本
        out.writeShort(ProtoInstant.VERSION_CODE);
        // 写入内容
        byte[] bytes = message.toByteArray();
        int length = bytes.length;
        // 写入消息长度（消息头）
        out.writeShort(length);
        out.writeBytes(message.toByteArray());
    }
}
